/***********************************************************************************************//**
*\n  @file       bus.hpp
*\n  @brief      Bus 总线基类
*\n  @details
*\n -----------------------------------------------------------------------------------
*\n  文件说明：
*\n 	1. Bus 总线基类
*\n
*\n -----------------------------------------------------------------------------------
*\n  版本:  	 修改人:       修改日期:        描述:
*\n  V0.01   罗先能        2021.4.9          创建
*\n
***************************************************************************************************/
#pragma once
#ifndef EA_90595D29_1CE6_4196_AC56_2D7E26F72464__INCLUDED_
#define EA_90595D29_1CE6_4196_AC56_2D7E26F72464__INCLUDED_

/**************************************************************************************************
* 头文件
***************************************************************************************************/
#include "vme.h"

/**************************************************************************************************
* 宏定义、结构定义
***************************************************************************************************/
#ifdef  __cplusplus //-- C only -----------------------------------------------------------
extern "C" {
#endif


#ifdef  __cplusplus //--C end -------------------------------------------------------------
}
#endif
/**************************************************************************************************
* 全局变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有函数声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 全局函数声明、定义
***************************************************************************************************/

#ifdef  __cplusplus //-- C++ only ---------------------------------------------------------

/*************************************************************************************//**
*\n 类名称： TBusInterface()
*\n 功能描述：
*\n            总线的纯虚拟基类（声明公共接口，不能实例化）
*\n
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01 罗先能        2021.4.12     创建
*****************************************************************************************/
class TBusInterface
{
public:
	virtual int Init() = 0;
	virtual int Lock() = 0;
	virtual int Unlock() = 0;
	virtual int Ioctl(long cmd,     void *pBuf) = 0;
	virtual int Read (long offset, void *pBuf, long iCnt) = 0;
	virtual int Write(long offset, void *pBuf, long iCnt) = 0;
protected:
};



/*************************************************************************************//**
*\n 类名称： TBus()
*\n 功能描述：
*\n            TBus总线基类（接口实现）
*\n
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01 罗先能        2021.4.12     创建
*****************************************************************************************/
class TBus : public TBusInterface
{
public:
	virtual ~TBus();
	TBus();
	TBus(const char name[]);
	TBus(const char name[], long physicalAddress, long size=0x1000);

public:
	void* pBaseAddress;      ///< 基地址（虚拟地址）
	long  mAddressSize;      ///< 地址长度

protected:
	char mName[64];			 ///< 实例名称
	pthread_rwlock_t mLock;  ///< 锁
	int mFd;				 ///< 设备描述符

	/* ------ 从基类继承 --------------------- */
public:
	virtual int Init()                                           override;
	virtual int Lock()                                           override;
	virtual int Unlock()                                         override;
	virtual int Ioctl(long cmd,     void *pBuf)                  override;
	virtual int Read (long offset, void *pBuf, long iCnt)        override;
	virtual int Write(long offset, void *pBuf, long iCnt)        override;

};
#endif //-- C++ end -------------------------------------------------------------------

#endif // EA_90595D29_1CE6_4196_AC56_2D7E26F72464__INCLUDED_


